package com.zsr.rabbitmq.two;

import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import com.zsr.rabbitmq.utils.RabbitMqUtils;

/**
 * 工作线程1（相当于之前的消费者）
 * @author zsr
 * @date 2021/7/29 21:17
 */
public class Worker01 {
    public static final String QUEUE_NAME="hello";

    public static void main(String[] args) throws Exception{
        Channel channel = RabbitMqUtils.getChannel();

        DeliverCallback deliverCallback=(consumerTag,message)->{
            System.out.println("接收到的消息："+new String(message.getBody()));
            //1.消息标记tag 2.false代表只应答接收到的那个传递的消息 true表示应答所有消息包括传递过来的消息
            channel.basicAck(message.getEnvelope().getDeliveryTag(),false);
        };
        CancelCallback cancelCallback=(consumerTag)->{
            System.out.println(consumerTag+"消息消费被中断");
        };
        //手动应答
        boolean autoAck =false;

        System.out.println("C2等待接收...");
        /**
         * 消费者接收消息
         * 1.消费哪个队列
         * 2.消费成功之后是否要自动应答，true代表的自动应答
         * 3.消费者未成功消费的回调（函数式接口，lambda表达式）
         * 4.消费者取消消费的回调（函数式接口，lambda表达式）
         */
        channel.basicConsume(QUEUE_NAME,autoAck,deliverCallback,cancelCallback);
    }
}
